package fakersql

import (
	"fmt"
	"github.com/brianvoe/gofakeit/v6"
	"log"
	"math/rand"
	"os"
	"strings"
	"time"

	_ "github.com/brianvoe/gofakeit/v6"
)

func Main() {
	print("faker sql call")
}

func init() {
	print("faker sql init call")
}

func writer() {
	print("writer")
}

func GetSql() {
	rand.Seed(time.Now().UnixNano()) // 设置随机种子

	emailList := make([]string, 0)

	// 生成100个唯一的电子邮件地址
	for i := 0; i < 100; i++ {
		for {
			email := gofakeit.Email()        // 生成一个随机的电子邮件地址
			if !contains(emailList, email) { // 检查电子邮件地址是否唯一
				emailList = append(emailList, email)
				break
			}
		}
	}

	// 生成插入语句列表
	sqlList := make([]string, 0)
	for i := 0; i < 100; i++ {
		age := rand.Intn(151)      // 随机年龄 (注意: Go的rand.Intn上限是最大值，所以这里需要调整)
		id_ := rand.Intn(9999) + 1 // 随机ID (注意: Go的rand.Intn上限是最大值，所以这里需要调整)
		sql := fmt.Sprintf("INSERT INTO student (id,age, email, first_name, last_name) VALUES (%d,%d, '%s', '%s', '%s');", id_, age, emailList[rand.Intn(len(emailList))], gofakeit.FirstName(), gofakeit.LastName())
		sqlList = append(sqlList, sql)
	}

	// 打印生成的SQL语句列表
	for _, sql := range sqlList {
		fmt.Println(sql)
	}
	err := os.WriteFile("output.sql", []byte(strings.Join(sqlList, "\n")), 0644)
	if err != nil {
		log.Fatal(err)
	}
}

//}

// 检查一个字符串是否存在于一个字符串切片中
func contains(slice []string, str string) bool {
	for _, item := range slice {
		if item == str {
			return true
		}
	}
	return false
}
